package com.javafactroy.kunlong.liteflow;

import com.javafactroy.kunlong.batch.User;
import com.yomahub.liteflow.core.FlowExecutor;
import com.yomahub.liteflow.flow.LiteflowResponse;
import lombok.extern.java.Log;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/*    * 复杂业务的解耦编排利器，为所有组件提供统一化的实现方式
 * 基于规则文件来编排流程，支持 xml,json,yml 三种规则文件写法方式
 * 框架中提供本地文件配置源，zk 配置源的实现
 * 框架提供自定义配置源，只需实现一个接口，即可从任何地方加载配置源
 * 支持 SpringBoot 的自动装配，也支持 Spring 的配置和非 Spring 的项目
 * 提供串行和并行 2 种模式，提供常见常见的表达式语句
 * 可以定义脚本语言节点，支持 QLExpress 和 Groovy 两种脚本，脚本语言支持即时热变更
 * 组件可以支持重试，每个组件均可自定义重试配置和指定异常
 * 提供无级嵌套的显式子流程模式，隐式子流程模式
 * 数据槽隔离机制，在多并发下上下文独立而稳定
 * 对系统损耗极低，可以稳定运行在核心业务大规模的微服务中
 * 自带简单的监控，能够知道每个组件的运行耗时排行
 */

// https://liteflow.cc/pages/5816c5/#liteflow%E6%A1%86%E6%9E%B6%E7%9A%84%E4%BC%98%E5%8A%BF
@Component
@Log
public class YourFlow {
    //前端配置页 面

    //https://gitee.com/dravin/liteflow-logicflow-vue.git
    @Resource
    private FlowExecutor flowExecutor;

    public LiteflowResponse dxpFlow() {
        FlowRequest<User> flowRequest = new FlowRequest<>();
        flowRequest.setId(2023).setRemark("flow").setData(new User());
        flowRequest.getData().setId(1l).setAge(12).setName("song").setPkey(11l);
        LiteflowResponse response = flowExecutor.execute2Resp("dxpFlow", flowRequest, LiteContext.class);
        //System.out.println(CommonUtils.toJSONStringPretty(response));
        return response;
    }

    public LiteflowResponse dxpFlow(FlowRequest<User> request) {

        LiteflowResponse response = flowExecutor.execute2Resp("dxpFlow", request, LiteContext.class);
        //System.out.println(CommonUtils.toJSONStringPretty(response));
        return response;


    }

    public LiteflowResponse parell() {
        //LiteflowResponse response = flowExecutor.execute2Resp("parell", "arg", LiteContext.class);
        FlowRequest<User> flowRequest = new FlowRequest<>();
        flowRequest.setId(2023).setRemark("flow").setData(new User());
        flowRequest.getData().setId(1l).setAge(12).setName("song").setPkey(11l);
        return flowExecutor.execute2Resp("parell", flowRequest, LiteContext.class);
    }
}
